/**
 * 字符串尺寸转化
 * @param {String | Number} sizeStr 转换变量
 * @param {String} unit 单位
 * @returns
 */
export const parseSizeString = (sizeStr , unit) => {
    if(typeof sizeStr == 'string') {
        const match = sizeStr.match(/^(-?\d+(\.\d+)?)(\w+)?$/);
        if (!match) {
            throw new Error('无效的尺寸字符串');
        }

        const number = parseFloat(match[1]);
        const strUnit = match[2] || 'px';

        return number + strUnit
    }else {
        return sizeStr + (unit || 'px')
    }
}

/**
 * 内联样式转化
 * @param {Object | String} str 转换变量
 */
export const parseStyle = (str) => {
    if(typeof str == 'string') {
        const styleObj = {};
        const properties = str.split(';');
        properties.forEach(property => {
            if (property.trim() !== '') {
                const [key, value] = property.trim().split(':');
                styleObj[key.trim()] = value.trim();
            }
        });
        return styleObj;
    }else {
        return str
    }
}

/**
 * 函数防抖
 * @param {Function} fnnc 需要执行的函数
 * @param {Time} wait 执行时间
 * @param {Boolean} immediate 是否立即执行
 * @returns
 */
export function debounce(func,wait,immediate) {
    let timer;
    return function () {
        let context = this;
        let args = arguments;
        if (timer) clearTimeout(timer);
        if (immediate) {
            var callNow = !timer;
            timer = setTimeout(() => {
                timer = null;
            }, wait)
            if (callNow) func.apply(context, args)
        } else {
            timer = setTimeout(function(){
                func.apply(context, args)
            }, wait);
        }
    }
}

/**
 * 转换时间日期对象格式
 * @param { Date } date 时间对象
 * @param { String } type 转换类型 取值: yyyy-MM-dd HH:mm:ss or yyyy-MM-dd or HH:mm:ss or yyyy-MM-dd HH:mm
 */
export const parseDateTime = (date , type) => {
    const dates = new Date(date)
    // 年份
    const year = dates.getFullYear();
    // 月份
    const month = dates.getMonth()+1 < 10 ? '0' + dates.getMonth()+1 : dates.getMonth()+1;
    // 日
    const day = dates.getDate() < 10 ? '0' + dates.getDate() : dates.getDate();
    // 小时
    const hh = dates.getHours() < 10 ? '0' + dates.getHours() : dates.getHours();
    // 分
    const min = dates.getMinutes() < 10 ? '0' + dates.getMinutes() : dates.getMinutes();
    // 秒
    const ss = dates.getSeconds() < 10 ? '0' + dates.getSeconds() : dates.getSeconds();
    if(type === 'yyyy-MM-dd HH:mm:ss') {
        return `${year}-${month}-${day}` + ' ' + `${hh}:${min}:${ss}`;
    }
    if(type === 'yyyy-MM-dd HH:mm') {
        return `${year}-${month}-${day}` + ' ' + `${hh}:${min}`;
    }
    if(type === 'yyyy-MM-dd') {
        return `${year}-${month}-${day}`
    }
    if(type === 'HH:mm:ss') {
        return `${hh}:${min}:${ss}`
    }
}

export const getDiffDay = (date_1, date_2) => {
    let totalDays, diffDate
    let myDate_1 = Date.parse(date_1)
    let myDate_2 = Date.parse(date_2)
    diffDate = Math.abs(myDate_1 - myDate_2)
    totalDays = Math.floor(diffDate / (1000 * 3600 * 24))
    return totalDays
}
